<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<style>

</style>

<body>
    3.<input id="input3" placeholder="请输入一个数"></input>
    <button id="btn3" onclick="jiecheng()">计算</button>
    <div></div>
    4. 求一个三位数，叫做“喇叭花数”，该三位数等与其每位数字的阶乘之和。输出100~999的所有喇叭花数。
    <button id="btn4" onclick="fun4()">计算</button>
</body>

<script>
    /* 

1. 使用函数方法书写一段程序，判断一个数是不是完美数。

如果一个数恰好等于它的因数之和，则称该数为“完美数”。

例如：第1个完全数是6，它有因数1、2、3、6，除去它本身6外，其余3个数相加，1+2+3=6。

*/
    function perfectNumber(number) {
        let res = 0
        for (let j = 0; j < number; j++) {
            if (number % j == 0) {
                console.log("约数", j)
                // j是约数
                res += j
            }
        }

        if (res == number) {
            console.log("是完美数")
        }

    }
    /* 盈数是一种特殊的自然数，除去它本身以外的一切正约数的和大于它本身。与完美数类似。

    使用函数方法编写一段程序。 */

    function fullNumber() {
        for (let i = 1; i <= 10000; i++) {
            let res = 0

            for (let j = 0; j < i; j++) {
                if (i % j == 0) {
                    // j是约数
                    res += j
                }
            }

            if (res > i) {
                console.log("是盈数")
            }
        }

    }

    /*     3. 用户输入一个整数n：

    求1! + 2! + 3! + 4! + …… + n!的和

    叹号表示阶乘，如4! = 1 * 2 * 3 * 4 */
    function jiecheng() {
        let res3 = document.getElementById("input3").value
        let res = 1
        for (let i = 1; i <= res3; i++) {
            res *= i
        }
        return res
    }

    function jiecheng1(a) {
        var s = 1;
        for (var i = 1; i <= a; i++) {
            s *= i;
        }
        return s;
    }

    function fun4() {
        for (var i = 100; i <= 999; i++) {
            var gewei = i % 10;
            var shiwei = (i / 10 % 10);
            var baiwei = (i / 100 % 10);
            if (jiecheng1(gewei) + jiecheng1(shiwei) + jiecheng1(baiwei) == i) {
                console.log(i)
            }
        }

    }



    function sum(num) {
        var sum = 0;
        for (var i = 1; i < num; i++) {
            if (num % i == 0) {
                sum += i;
            }
        }
        return sum;
    }

    function fun5() {
        for (var i = 1; i < 2000; i++) {
            //拿到i的约数和
            var b = sum(i);
            //判断b的约数和与i 是否相等 且 i和b不相等
            if (sum(b) == i && i != b) {
                console.log(i + '和' + b + '是一对亲密数');
            }
        }
    }

    function rev(arr) {
        var newArr = []
        for (let i = arr.length - 1; i >= 0; i--) {
            newArr.push(arr[i])
        }
    }
    rev("zt")

    function rev1(arr) {
        var newArr = arr.split(" ")
        var res = []
        for (let i = newArr.length - 1; i >= 0; i--) {
            res.push(newArr[i])
        }
        console.log(res)
    }
    rev1("i come from beijing")
    // 9
    function rightchange(char, n) {
        return char.substr(char.length - n) + char.substr(0, char.length - n - 1);
    }
    // 10不是很会

    // 11
    function calAv() {
        let grade = [1, 8, 7, 5, 4, 3, 2, 5, 6, 7]
        let sum = 0
        let index = 0

        for (let i of grade) {
            sum += i
        }
        for (let i of grade) {
            if (i > sum / 10) {
                index++
            }
        }
        console.log(index)




    }
    // 12.  将"i love javascript very much"的每个单词的第一个字母，变为大写。
    function up() {
        let str = "i love javascript very much"
        let arr = str.split(" ")
        console.log(arr)
        for (let i of arr) {
            i[0].toUpperCase()
        }
    }

    // 13.  求一组数中的最大值和最小值，以及所在位置的下标。
    function max() {
        let arr = [1, 2, 4, 6, 7, 9, 1, 2]
        let max = arr[0]
        let maxIndex = 0
        let min = arr[0]
        let minIndex = 0

        for (let i = 0; i < arr.length; i++) {
            if (max < arr[i]) {
                max = arr[i]
                maxIndex = i
            }
        }
        for (let i = 0; i < arr.length; i++) {
            if (min > arr[i]) {
                min = arr[i]
                minIndex = i
            }
        }

        console.log(max, maxIndex, min, minIndex)
    }
    max()

    // 数组去重
    function unique() {
        var n = []; //一个新的临时数组
        for (var i = 0; i < this.length; i++) //遍历当前数组
        {
            //如果当前数组的第i已经保存进了临时数组，那么跳过，
            //否则把当前项push到临时数组里面
            if (n.indexOf(this[i]) == -1) n.push(this[i]);
        }
        return n;
    }

    // 19
    function p19() {
        for (let i = 1; i < 10; i++) {
            for (let j = 1; j <= i; j++) {
                console.log(i + "*" + j + "=" + i * j)
            }
        }

    }
    p19()
</script>

</html>